package service

import (
	"ksd-social-api/commons/base/service"
	"ksd-social-api/commons/page"
	context3 "ksd-social-api/modules/msg/model/context"
	"ksd-social-api/modules/resume/model"
	"ksd-social-api/modules/resume/model/context"
	"ksd-social-api/modules/resume/model/vo"
	"ksd-social-api/utils"
	"strconv"
	"time"
)

type AdminResumeTamplateService struct {
	service.BaseService
}

/**
 * @author feige
 * @date 2023-10-13
 * @version 1.0
 * @desc 查询资源列表信息，栏目和搜索使用
 */
func (service *AdminResumeTamplateService) FindResumeTemplateListAndPage(ctx context.ResumeSearchContext) *page.Page {
	p := adminResumeTemplateMapper.FindResumeTemplateListAndPage(ctx)
	resumeTemplates := p.Records.([]model.ResumeTemplate)
	resumeTemplateVos := []vo.ResumeTemplateVo{}
	for _, resumeTemplate := range resumeTemplates {
		// 3: 查询当前登录的用户信息和资源id去查询用户资源收藏表
		resumeTemplateVo := vo.ResumeTemplateVo{}
		utils.CopyProperties(&resumeTemplateVo, resumeTemplate)
		// 2: 如果没有错误就必须把model数据导入vo数据中
		resumeTemplateVos = append(resumeTemplateVos, resumeTemplateVo)
	}

	p.Records = resumeTemplateVos
	return p
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  修改状态
 */
func (service *AdminResumeTamplateService) UpdateFieldById(ctx context.ResumeUpdateContext) bool {
	return adminResumeTemplateMapper.UpdateFieldById(ctx.Id.Uint64(), ctx.Field, ctx.Value, ctx.SystemId)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  修改状态
 */
func (service *AdminResumeTamplateService) UpdateFieldByCodeId(ctx context.ResumeUpdateContext) bool {
	return adminResumeTemplateMapper.UpdateFieldByCodeId(ctx.Id.Uint64(), ctx.Field, ctx.Value, ctx.SystemId)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  保存和修改兑换码
 */
func (service *AdminResumeTamplateService) SaveUpdateCode(ctx context.ResumeCodeContext) *vo.ResumeTemplateCodeVO {
	// 保存入库
	var resumeTemplateCode model.ResumeTemplateCode
	var resumeTemplateCodeVO vo.ResumeTemplateCodeVO
	utils.CopyProperties(&resumeTemplateCode, ctx)
	parseUint, _ := strconv.ParseUint(ctx.Id, 10, 64)
	resumeTemplateCode.Id = parseUint
	resumeTemplateCode.Opid = ctx.Opid.Uint64()
	data := adminResumeTemplateMapper.SaveUpdateResumeTemplateCode(resumeTemplateCode)
	utils.CopyProperties(&resumeTemplateCodeVO, data)
	return &resumeTemplateCodeVO
}

/**
 * @author feige
 * @date 2023-10-13
 * @version 1.0
 * @desc 查看兑换码
 */
func (service *AdminResumeTamplateService) FindCodePage(ctx context.CodeSearchContext) *page.Page {
	p := adminResumeTemplateMapper.FindResumeTemplateCodePage(ctx)
	resumeTemplateCodes := p.Records.([]model.ResumeTemplateCode)
	resumeTemplateCodesVos := []vo.ResumeTemplateCodeVO{}
	for _, resumeTemplateCode := range resumeTemplateCodes {
		// 3: 查询当前登录的用户信息和资源id去查询用户资源收藏表
		resumeTemplateCodeVO := vo.ResumeTemplateCodeVO{}
		utils.CopyProperties(&resumeTemplateCodeVO, resumeTemplateCode)
		// 2: 如果没有错误就必须把model数据导入vo数据中
		resumeTemplateCodesVos = append(resumeTemplateCodesVos, resumeTemplateCodeVO)
	}
	p.Records = resumeTemplateCodesVos
	return p
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据id删除
 */
func (service *AdminResumeTamplateService) DelById(id uint64, systemId uint64) bool {
	return adminResumeTemplateMapper.DelById(id, systemId)
}

/**
 * @author feige
 * @date 2023-10-10
 * @version 1.0
 * @desc  根据用户id查询用户明细
 */
func (service *AdminResumeTamplateService) DelCodeById(id uint64, systemId uint64) bool {
	return adminResumeTemplateMapper.DelCodeById(id, systemId)
}

/**
 * 批量授权用户
 * @author feige
 * @date 2023-12-06
 * @version 1.0
 * @desc
 */
func (service *AdminResumeTamplateService) SaveUserResumeTemplateOrder(ctx context.BatchUsersContext) bool {
	// 1： 判断用户是否购买此小册，如果购买过了就就不要去保存订单
	userVo := userMapper.GetUserInfoByUuid(ctx.Uuid, ctx.SystemId)
	userId := userVo.Id
	// 1： 判断用户是否购买此小册，如果购买过了就就不要去保存订单
	// 1： 判断用户是否购买此小册，如果购买过了就就不要去保存订单
	isBuyFlag := resumeTemplateCodeMapper.CountUserBuyResumeTemplateNo(userId, ctx.Opid.Uint64(), ctx.SystemId)
	if isBuyFlag == 0 {
		// 根据小册id查询小册信息
		resumeTemplate, _ := resumeTemplateMapper.GetById(ctx.Opid.Uint64(), ctx.SystemId)
		userVo := userMapper.GetUserByID(userId, ctx.SystemId)

		userBuyResumeTemplate := model.UserBuyResumeTemplate{}
		OutTradeNo := service.GetSnowWorkerIdString(8)
		// 处理返回结果
		userBuyResumeTemplate.Opid = ctx.Opid.Uint64()
		userBuyResumeTemplate.Title = resumeTemplate.Title
		userBuyResumeTemplate.Cover = resumeTemplate.Cover
		userBuyResumeTemplate.UserId = userId
		userBuyResumeTemplate.Username = userVo.Username
		userBuyResumeTemplate.Avatar = userVo.Avatar
		userBuyResumeTemplate.Phone = userVo.Telephone
		userBuyResumeTemplate.Address = userVo.Address
		userBuyResumeTemplate.Nickname = userVo.Nickname

		userBuyResumeTemplate.Code = ""
		userBuyResumeTemplate.PayMethod = 4
		userBuyResumeTemplate.PayMethodName = "人工服务"
		userBuyResumeTemplate.Tradeno = OutTradeNo
		userBuyResumeTemplate.Orderno = OutTradeNo
		userBuyResumeTemplate.OrderJson = ""
		userBuyResumeTemplate.SystemId = ctx.SystemId
		userBuyResumeTemplate.SystemName = ctx.SystemName
		userBuyResumeTemplate.Price = resumeTemplate.Price
		// 保存订单的接口
		resumeTemplateCodeMapper.SaveUserBuyResumeTemplate(userBuyResumeTemplate)
		// 保存消息
		messageMeContext := context3.MessageMeContext{}
		messageMeContext.UserId = userId
		messageMeContext.Title = resumeTemplate.Title
		messageMeContext.Uuid = userVo.Uuid
		messageMeContext.SystemId = ctx.SystemId
		messageMeContext.SystemName = "系统512"
		messageMeContext.Username = userVo.Nickname
		messageMeContext.Url = "https://www.study512.com/template"
		messageMeService.SaveMessageMeBuyResumeTemplate(&messageMeContext)
		return true
	} else {
		return false
	}

}

/*
复制
*
*/
func (service *AdminResumeTamplateService) CopyData(id uint64, systemId uint64) bool {
	// 保存入库
	data := adminResumeTemplateMapper.GetById(id, systemId)
	data.Id = 0
	data.Status = 0
	data.CreateTime = time.Now()
	data.UpdateTime = time.Now()
	adminResumeTemplateMapper.SaveUpdateResumeTemplate(*data)
	return true
}
